Subject: AD

Envivo Bio, Inc.; Confidential

logo

1.1 Overview of microbial community composition

Figure 1 is an interactive figure showing the microbial community composition in each collected sample. Here, each color and shade corresponds to a different genus. For reference, domestic dogs (Canis familiaris) and gray wolves (Canis lupus) are different species that belong to the same genus (Canis).

You can interact with this figure by:

Figure 1: Microbial community composition of collected saliva and CapScan samples. CapScan samples are ordered from proximal to distal intestine (i.e., increasing distance from mouth). Taxonomic composition is reported at the genus rank. Genera present at <1% relative abundance across all samples are reported as “Other genera”. Note: Blue = Firmicutes; Yellow = Actinomycetes; Green = Bacteroidetes; Red = Proteobacteria; Purple = all other phyla. Shades of the same color (except purple) correspond to different genera from the same phylum.



1.2 High-resolution snapshot of community composition

Figure 2 is an interactive figure showing the microbial community composition at higher taxononomic resolution. Here, each row corresponds to a unique microbe.

You can interact with this figure by:



Figure 2: Heat map showing relative abundance of microbes in each sample (N = 238 total identified). Each row corresponds to a unique microbe and each column corresponds to an individual sample. Note the relative abundance colorscale is in log units.



1.3 Notable microbes detected



1.4 References

Quévrain, E., Maubert, M.A., Michon, C., Chain, F., Marquant, R., Tailhades, J., et al. (2017) Identification of an anti-inflammatory protein from Faecalibacterium prausnitzii, a commensal bacterium deficient in Crohn’s disease. Gut 65: 415–425.

Vogel, V., Bauer, R., Mauerer, S., Schiffelholz, N., Haupt, C., Seibold, G.M., et al. (2021) Angicin, a novel bacteriocin of Streptococcus anginosus. Sci Rep 11: 1–16.

LS0tCnRpdGxlOiAiPGJyPiBUYXhvbm9taWMgcHJvZmlsaW5nIG9mIGJhY3RlcmlhbCBhbmQgYXJjaGFlYWwgY29tbXVuaXRpZXMgZnJvbSBzYWxpdmEgYW5kIENhcFNjYW4tc2FtcGxlZCBndXQgbWV0YWdlbm9tZXMiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgotLS0KCjxzdHlsZT4KZGl2LmhpZ2hsaWdodCB7CmJhY2tncm91bmQtY29sb3I6ICNGMkYyRjI7CnBhZGRpbmc6IDBweDsKYm9yZGVyLXJhZGl1czogMnB4Owp9Cgo8L3N0eWxlPgoKIyMjIDxiPjxpPlN1YmplY3Q6IEFEPC9iPjwvaT4KKkVudml2byBCaW8sIEluYy47IENvbmZpZGVudGlhbCoKCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciBhZGQgbG9nbywgZWNobyA9IEZBTFNFfQpsb2dvX3BhdGggPC0gIi4uL2xvZ28vZW52aXZvLnN2ZyIKCmh0bWx0b29sczo6aW1nKHNyYyA9IGtuaXRyOjppbWFnZV91cmkobG9nb19wYXRoKSwgCiAgICAgICAgICAgICAgIGFsdCA9ICJsb2dvIiwgCiAgICAgICAgICAgICAgIHN0eWxlID0gInBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgcmlnaHQ6MDsgcGFkZGluZzoxMHB4OyB3aWR0aDogMTQ1cHg7IGhlaWdodDogNDJweCIpCmBgYAoKYGBge3IgbG9hZCBwYWNrYWdlcywgaW5jbHVkZSA9IEZBTFNFfQojIExpc3QgcmVxdWlyZWQgcGFja2FnZXMKY3JhblBhY2thZ2VzIDwtIGMoIkJpb2NNYW5hZ2VyIiwgImdncGxvdDIiLCAiZHBseXIiLCAidGlkeXIiLAogICAgICAgICAgICAgICAgICAiYXBlIiwgImdncGxvdDIiLCAicmVzaGFwZTIiLCAicGxvdGx5IiwgImhlYXRtYXBseSIpCmJpb2NQYWNrYWdlcyA8LSBjKCJwaHlsb3NlcSIsICJCaW9zdHJpbmdzIikKCiMgSW5zdGFsbCBtaXNzaW5nIENSQU4gcGFja2FnZXMKaW5zdGFsbGVkQ1JBTiA8LSBjcmFuUGFja2FnZXMgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkKaWYgKGFueShpbnN0YWxsZWRDUkFOID09IEZBTFNFKSkgewogIGluc3RhbGwucGFja2FnZXMoY3JhblBhY2thZ2VzWyFpbnN0YWxsZWRDUkFOXSwKICAgICAgICAgICAgICAgICAgIHJlcG9zID0gJ2h0dHA6Ly9jcmFuLnVzLnItcHJvamVjdC5vcmcnKQp9CgojIEluc3RhbGwgbWlzc2luZyBCaW9jb25kdWN0b3IgcGFja2FnZXMKaW5zdGFsbGVkQmlvYyA8LSBiaW9jUGFja2FnZXMgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkKaWYgKGFueShpbnN0YWxsZWRCaW9jID09IEZBTFNFKSkgewogIEJpb2NNYW5hZ2VyOjppbnN0YWxsKGJpb2NQYWNrYWdlc1shaW5zdGFsbGVkQmlvY10pCn0KCiMgTG9hZCBwYWNrYWdlcwpsYXBwbHkoYyhjcmFuUGFja2FnZXMsIGJpb2NQYWNrYWdlcyksIGxpYnJhcnksIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKYGBgCgpgYGB7ciBsb2FkIGRhdGEsIGluY2x1ZGUgPSBGQUxTRX0KIyBMb2FkIENvc21vc0lEIGRhdGEgYW5kIGZvcm1hdHRlZCBtZXRhZGF0YQpjb3Ntb3MgPC0gcmVhZC5jc3YoZmlsZSA9ICIuLi9kYXRhL0NQMDQ2MThfY29zbW9zaWRfMjAyMjA5MDYuY3N2IikKbWV0YSA8LSByZWFkLmNzdihmaWxlID0gIi4uL2RhdGEvQ1AwNDYxOF9tZXRhZGF0YS5jc3YiKQpgYGAKCmBgYHtyIGZvcm1hdCBkYXRhLCBpbmNsdWRlID0gRkFMU0V9CiMgUHJlcGFyZSB0YXhfdGFibGUgYW5kIG90dV90YWJsZSBvYmplY3RzCnRheCA8LSBjb3Ntb3MgJT4lCiAgc2VsZWN0KFBoeWx1bSwgQ2xhc3MsIE9yZGVyLCBGYW1pbHksIEdlbnVzLCBTcGVjaWVzLCBTdHJhaW4pICU+JQogIGFzLm1hdHJpeCAlPiUKICB0YXhfdGFibGUKCnN0YXJ0X2luZCA8LSBncmVwKCJTdHJhaW4iLCBjb2xuYW1lcyhjb3Ntb3MpKSsxCnN0b3BfaW5kIDwtIG5jb2woY29zbW9zKS0yCmFidW5kYW5jZV9zY29yZXMgPC0gY29zbW9zWyxzdGFydF9pbmQ6c3RvcF9pbmRdICU+JSBvdHVfdGFibGUoLiwgdGF4YV9hcmVfcm93cyA9IFRSVUUpCgojIFJlZm9ybWF0IHNhbXBsZSBuYW1lcyBhbmQgbWV0YWRhdGEgc2FtcGxlIG5hbWVzIHNvIHRoZXkgbWF0Y2gKY29sbmFtZXMoYWJ1bmRhbmNlX3Njb3JlcykgPC0gY29sbmFtZXMoYWJ1bmRhbmNlX3Njb3JlcykgJT4lCiAgZ3N1YigiWCIsICIiLCAuKSAlPiUKICBnc3ViKCJfLioiLCAiIiwgLikgJT4lCiAgcGFzdGUwKCJFQl8iLCAuKQoKcm93Lm5hbWVzKG1ldGEpIDwtIG1ldGEgJT4lCiAgcHVsbChTYW1wbGVfbnVtYmVyKSAlPiUKICBwYXN0ZTAoIkVCXyIsIC4pCgpzYW1fZGF0YSA8LSBzYW1wbGVfZGF0YShtZXRhKQpgYGAKCmBgYHtyIGJ1aWxkIHBoeWxvc2VxLCBpbmNsdWRlID0gRkFMU0V9CiMgQnVpbGQgcGh5bG9zZXEgb2JqZWN0CnBzIDwtIHBoeWxvc2VxKHRheCwgYWJ1bmRhbmNlX3Njb3Jlcywgc2FtX2RhdGEpCmBgYAoKYGBge3IgdHJhbnNmb3JtIGRhdGEsIGluY2x1ZGUgPSBGQUxTRX0KIyBMb2cgdHJhbnNmb3JtCnBzTG9nIDwtIHBzICU+JSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyguLCBmdW5jdGlvbih4KSBsb2coeCArIDEsIGJhc2UgPSAxMCkpCgojIFJlbGF0aXZlIGFidW5kYW5jZSB0cmFuc2Zvcm0KcHNSQSA8LSBwcyAlPiUgdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMoLiwgZnVuY3Rpb24oeCkgeC9zdW0oeCkqMTAwKQpgYGAKCmBgYHtyIHJhbmsgcGh5bGEsIGluY2x1ZGUgPSBGQUxTRX0KcGh5X3JhbmsgPC0gcHNSQSAlPiUKICB0YXhfZ2xvbSguLCB0YXhyYW5rID0gIlBoeWx1bSIpICU+JQogIHBzbWVsdCAlPiUKICBncm91cF9ieShQaHlsdW0pICU+JQogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oQWJ1bmRhbmNlKSkKCnBoeV9yYW5rICU+JSBhcnJhbmdlKGRlc2MobWVkaWFuKSkKYGBgCgpgYGB7ciBzdWJqZWN0IHN1YnNldCwgaW5jbHVkZSA9IEZBTFNFfQojIFNldCBzdWJqZWN0CnN1YmplY3QgPC0gIkFEIgoKIyBTdWJzZXQgdG8gc3ViamVjdCBzYW1wbGVzIGFuZCBkcm9wIG1pc3NpbmcgdGF4YQpwc1N1YiA8LSBzdWJzZXRfc2FtcGxlcyhwcywgU3ViamVjdCA9PSBzdWJqZWN0KSAlPiUKICBwcnVuZV90YXhhKHRheGFfc3VtcyguKSA+IDAsIC4pCgojIEFkZCBwbG90IGxhYmVsIGZvciBlYWNoIHNhbXBsZQpzYW1wbGVfZGF0YShwc1N1YikkUGxvdF9sYWJlbCA8LSBwYXN0ZTAoc2FtcGxlX25hbWVzKHBzU3ViKSwgIiAoIiwgc2FtcGxlX2RhdGEocHNTdWIpJFNhbXBsZV90eXBlLCAiKSIpCgojIFJlbGF0aXZlIGFidW5kYW5jZSB0cmFuc2Zvcm0KcHNTdWJfcmEgPC0gcHNTdWIgJT4lIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKC4sIGZ1bmN0aW9uKHgpIHgvc3VtKHgpKjEwMCkKYGBgCgpgYGB7ciBwbG90IGJhciwgaW5jbHVkZSA9IEZBTFNFfQojIERlZmluZSBOT1QgSU4gb3BlcmF0b3IKJyUhaW4lJyA8LSBmdW5jdGlvbih4LHkpISgnJWluJScoeCx5KSkKCiMgQWdnbG9tZXJhdGUgYXQgR2VudXMgYW5kIG1lbHQKdGF4cmFuayA8LSAiR2VudXMiCm1lbHQgPC0gcHNTdWJfcmEgJT4lIHRheF9nbG9tKC4sIHRheHJhbmsgPSB0YXhyYW5rKSAlPiUgcHNtZWx0CgojIERlZmluZSBtYWpvciBwaHlsYQptYWpvcl9waHkgPC0gYygiRmlybWljdXRlcyIsICJBY3Rpbm9iYWN0ZXJpYSIsICJCYWN0ZXJvaWRldGVzIiwgIlByb3Rlb2JhY3RlcmlhIikKCiMgSWRlbnRpZnkgZ2VuZXJhIHByZXNlbnQgaW4gPDElIHJlbGF0aXZlIGFidW5kYW5jZSBpbiBhbGwgc2FtcGxlcwpyYXJlX2dlbmVyYSA8LSBtZWx0ICU+JQogIGdyb3VwX2J5KFNhbXBsZV9udW1iZXIsIEdlbnVzKSAlPiUKICBzdW1tYXJpemUoc3VtID0gc3VtKEFidW5kYW5jZSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShHZW51cykgJT4lCiAgc3VtbWFyaXplKG1heCA9IG1heChzdW0pKSAlPiUKICBmaWx0ZXIobWF4IDwgMSkgJT4lCiAgcHVsbChHZW51cykKCiMgQ3JlYXRlIG5ldyBjb2x1bW4gY29udGFpbmluZyBuYW1lIG9mIGdlbnVzIGlmIGFib3ZlIGN1dG9mZiBvciAiT3RoZXIgZ2VuZXJhIiBpZiBub3QKZGYgPC0gbWVsdCAlPiUKICBtdXRhdGUoUGh5X2dyb3VwID0gY2FzZV93aGVuKFBoeWx1bSAlIWluJSBtYWpvcl9waHkgfiAiT3RoZXIgcGh5bHVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBQaHlsdW0pLAogICAgICAgICBQaHlfZ3JvdXAgPSBjYXNlX3doZW4oR2VudXMgJWluJSByYXJlX2dlbmVyYSB+ICJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IFBoeV9ncm91cCksCiAgICAgICAgIFRheF9sYWJlbCA9IGNhc2Vfd2hlbihHZW51cyAlaW4lIHJhcmVfZ2VuZXJhIH4gIkFhT3RoZXIgZ2VuZXJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBHZW51cykpICU+JQogIGdyb3VwX2J5KFN1YmplY3QpICU+JQogIGFycmFuZ2UoU3ViamVjdCwgU2FtcGxlX3R5cGUpCgojIERlZmluZSBvcmRlcgpwaHlfb3JkZXIgPC0gYygiT3RoZXIgcGh5bHVtIiwKICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiwKICAgICAgICAgICAgICAgIkJhY3Rlcm9pZGV0ZXMiLAogICAgICAgICAgICAgICAiQWN0aW5vYmFjdGVyaWEiLAogICAgICAgICAgICAgICAiRmlybWljdXRlcyIpICU+JSByZXYKCmdlbl9vcmRlciA8LSBkZiAlPiUKICBzZWxlY3QoUGh5X2dyb3VwLCBUYXhfbGFiZWwpICU+JQogIG11dGF0ZShPcmRlciA9IG1hdGNoKFBoeV9ncm91cCwgcGh5X29yZGVyKSkgJT4lCiAgYXJyYW5nZShPcmRlciwgZGVzYyhUYXhfbGFiZWwpKSAlPiUKICBkaXN0aW5jdCAlPiUKICBwdWxsKFRheF9sYWJlbCkKCmdlbl9vcmRlciA8LSBmYWN0b3IoZ3N1YigiXkFhIiwgIiIsIGdlbl9vcmRlciksIGxldmVscyA9IGdzdWIoIl5BYSIsICIiLCBnZW5fb3JkZXIpKSAjIHRoZSBBYSBpcyB0byBtYWtlIHN1cmUgIk90aGVyIiBpcyBwbG90dGVkIGF0IHRoZSB0b3AKCmRmIDwtIGRmICU+JQogIG11dGF0ZShUYXhfbGFiZWwgPSBmYWN0b3IoZ3N1YigiXkFhIiwgIiIsIFRheF9sYWJlbCksIGxldmVscyA9IGdlbl9vcmRlcikpCgojIERlZmluZSBjb2xvcnMKcGh5X2NvbG9yIDwtIGRhdGEuZnJhbWUoUGh5bHVtID0gYygiQWN0aW5vYmFjdGVyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYWN0ZXJvaWRldGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlybWljdXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiksCiAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VfY29sb3IgPSBjKCIjRkZCNzI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM4MzJDRkYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzY0QzYyQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMDcyQUM4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNFOTNCNEYiKSkKCnBoeV9jb2xvciA8LSBwaHlfY29sb3JbbWF0Y2gocGh5X29yZGVyLCBwaHlfY29sb3IkUGh5bHVtKSxdCgojIERhdGEgZnJhbWUgYXMgaW5wdXQsIGRhdGEgZnJhbWUgd2l0aCBuZXcgY29sdW1uIG9mIGhleCBjb2RlcyBhcyBvdXRwdXQKY29sX3BhbGV0dGUgPC0gZGYgJT4lCiAgc2VsZWN0KFBoeV9ncm91cCwgVGF4X2xhYmVsKSAlPiUKICBkaXN0aW5jdCAlPiUKICBtdXRhdGUoSGV4X2NvZGUgPSBOQSkKCgpmb3IocGh5IGluIHBoeV9jb2xvciRQaHlsdW0pIHsKICB0ZXN0IDwtIGNvbF9wYWxldHRlICU+JQogICAgZmlsdGVyKFBoeV9ncm91cCA9PSBwaHkpICU+JQogICAgcHVsbChUYXhfbGFiZWwpICU+JQogICAgZHJvcGxldmVscyAlPiUKICAgIGxldmVscwogIAogIHRheC5jb2xvciA8LSBjb2xvclJhbXBQYWxldHRlKGMocGh5X2NvbG9yJEJhc2VfY29sb3JbbWF0Y2gocGh5LCBwaHlfY29sb3IkUGh5bHVtKV0sICJ3aGl0ZSIpKQogIGNvbHRlc3QgPC0gdGF4LmNvbG9yKGxlbmd0aCh0ZXN0KSsyKSAlPiUKICAgIC5bLWxlbmd0aCguKV0KICBjb2xfcGFsZXR0ZSRIZXhfY29kZVttYXRjaCh0ZXN0LCBjb2xfcGFsZXR0ZSRUYXhfbGFiZWwpXSA8LSBjb2x0ZXN0Cn0KCmNvbF9wYWxldHRlIDwtIGNvbF9wYWxldHRlICU+JSBhcnJhbmdlKGZhY3RvcihUYXhfbGFiZWwsIGxldmVscyA9IGdlbl9vcmRlcikpCmBgYAoKPGRpdiBjbGFzcz0iaGlnaGxpZ2h0Ij4KIyMjIDEuMSBPdmVydmlldyBvZiBtaWNyb2JpYWwgY29tbXVuaXR5IGNvbXBvc2l0aW9uCjwvZGl2PgoKRmlndXJlIDEgaXMgYW4gaW50ZXJhY3RpdmUgZmlndXJlIHNob3dpbmcgdGhlIG1pY3JvYmlhbCBjb21tdW5pdHkgY29tcG9zaXRpb24gaW4gZWFjaCBjb2xsZWN0ZWQgc2FtcGxlLiBIZXJlLCBlYWNoIGNvbG9yIGFuZCBzaGFkZSBjb3JyZXNwb25kcyB0byBhIGRpZmZlcmVudCBnZW51cy4gRm9yIHJlZmVyZW5jZSwgZG9tZXN0aWMgZG9ncyAoKkNhbmlzIGZhbWlsaWFyaXMqKSBhbmQgZ3JheSB3b2x2ZXMgKCpDYW5pcyBsdXB1cyopIGFyZSBkaWZmZXJlbnQgc3BlY2llcyB0aGF0IGJlbG9uZyB0byB0aGUgc2FtZSBnZW51cyAoKkNhbmlzKikuCjxicj48YnI+CllvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzIGZpZ3VyZSBieToKCiogSG92ZXJpbmcgdGhlIGN1cnNvciBvdmVyIGEgY29sb3IgaW4gdGhlIHN0YWNrZWQgYmFyIHRvIHNlZSB0aGUgdGF4b25vbWljIGlkZW50aXR5LCBzYW1wbGUgdHlwZSwgYW5kIHJlbGF0aXZlIGFidW5kYW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgY29sb3IgYW5kIGJhcgoqIENsaWNraW5nIGFuZCBkcmFnZ2luZyB0aGUgY3Vyc29yIG92ZXIgYSBwb3J0aW9uIG9mIHRoZSBmaWd1cmUgdG8gem9vbQoqIFNpbmdsZS1jbGlja2luZyBhIGdlbnVzJ3MgbmFtZSBpbiB0aGUgbGVnZW5kIHRvIHJlbW92ZSB0aGF0IGdlbnVzIGZyb20gdGhlIGZpZ3VyZQoqIERvdWJsZS1jbGlja2luZyAoPHU+dmVyeSBxdWlja2x5PC91PikgYSBnZW51cydzIG5hbWUgaW4gdGhlIGxlZ2VuZCB0byBvbmx5IHNob3cgdGhhdCBnZW51cwpgYGB7ciwgb3V0LndpZHRoID0gIjEwMCUiLCBlY2hvID0gRkFMU0V9CiMgUGxvdApwQmFyIDwtIHBsb3RfbHkoZGYsIHggPSB+UGxvdF9sYWJlbCwgeSA9IH5BYnVuZGFuY2UsIHR5cGUgPSAiYmFyIiwKICAgICAgICAgICAgIGNvbG9yID0gflRheF9sYWJlbCwgY29sb3JzID0gY29sX3BhbGV0dGUkSGV4X2NvZGUsCiAgICAgICAgICAgICB0ZXh0cG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCI8Yj5HZW51czo8L2I+IiwgVGF4X2xhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPjxicj4iLCAiPGI+U2FtcGxlIHR5cGU6PC9iPiIsIFNhbXBsZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsICI8Yj5SZWxhdGl2ZSBhYnVuZGFuY2U6PC9iPiIsIHBhc3RlMChyb3VuZChBYnVuZGFuY2UsIGRpZ2l0cyA9IDEpLCAiJSIpKSwKICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICJ0ZXh0IikgJT4lCiAgbGF5b3V0KHhheGlzID0gbGlzdCh0aXRsZSA9ICI8Yj5TYW1wbGU8L2I+IiwKICAgICAgICAgICAgICAgICAgICAgIHRpY2tzID0gIm91dHNpZGUiKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIjxiPlJlbGF0aXZlIGFidW5kYW5jZSAoJSk8L2I+IiwKICAgICAgICAgICAgICAgICAgICAgIHRpY2tzID0gIm91dHNpZGUiKSwKICAgICAgICAgYmFybW9kZSA9ICJzdGFjayIsCiAgICAgICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICJBcmlhbCIpKQoKcEJhciR4JGxheW91dCR5YXhpcyRsaW5lY29sb3IgPC0gIiMwMDAwMDAiCnBCYXIKYGBgCioqRmlndXJlIDE6KiogTWljcm9iaWFsIGNvbW11bml0eSBjb21wb3NpdGlvbiBvZiBjb2xsZWN0ZWQgc2FsaXZhIGFuZCBDYXBTY2FuIHNhbXBsZXMuIENhcFNjYW4gc2FtcGxlcyBhcmUgb3JkZXJlZCBmcm9tIHByb3hpbWFsIHRvIGRpc3RhbCBpbnRlc3RpbmUgKCppKi4qZSouLCBpbmNyZWFzaW5nIGRpc3RhbmNlIGZyb20gbW91dGgpLiBUYXhvbm9taWMgY29tcG9zaXRpb24gaXMgcmVwb3J0ZWQgYXQgdGhlIGdlbnVzIHJhbmsuIEdlbmVyYSBwcmVzZW50IGF0IDwxJSByZWxhdGl2ZSBhYnVuZGFuY2UgYWNyb3NzIGFsbCBzYW1wbGVzIGFyZSByZXBvcnRlZCBhcyAiT3RoZXIgZ2VuZXJhIi4gPHU+Tm90ZTo8L3U+IEJsdWUgPSAqRmlybWljdXRlcyo7IFllbGxvdyA9ICpBY3Rpbm9teWNldGVzKjsgR3JlZW4gPSAqQmFjdGVyb2lkZXRlcyo7IFJlZCA9ICpQcm90ZW9iYWN0ZXJpYSo7IFB1cnBsZSA9IGFsbCBvdGhlciBwaHlsYS4gU2hhZGVzIG9mIHRoZSBzYW1lIGNvbG9yIChleGNlcHQgcHVycGxlKSBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCBnZW5lcmEgZnJvbSB0aGUgc2FtZSBwaHlsdW0uCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQojIE9yZGluYXRpb24tYmFzZWQKcEhlYXRfb3JkIDwtIHBsb3RfaGVhdG1hcChwc1N1Yl9yYSwgbWV0aG9kID0gIk5NRFMiLCBkaXN0YW5jZSA9ICJicmF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhLmxhYmVsID0gIlN0cmFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LmxhYmVsID0gMzAwKQoKIyBSZXRyaWV2ZSByb3cgYW5kIHRheG9uIG9yZGVycwpyb3dfb3JkZXIgPC0gcEhlYXRfb3JkJHBsb3RfZW52JHRheGEub3JkZXIgJT4lIHJldgp0YXhfb3JkZXIgPC0gdGF4X3RhYmxlKHBzU3ViX3JhKVttYXRjaChyb3dfb3JkZXIsIHJvd25hbWVzKHRheF90YWJsZShwc1N1Yl9yYSkpKSxdICU+JQogIGFzLmRhdGEuZnJhbWUgJT4lCiAgbXV0YXRlKHRheG9uID0gcm93bmFtZXMoLiksCiAgICAgICAgIEFidW5kYW5jZSA9IDEsCiAgICAgICAgIFNhbXBsZSA9IHN1YmplY3QpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0KIyBQcmVwYXJlIGRhdGEKeCA8LSBwc1N1Yl9yYSAlPiUgb3R1X3RhYmxlICU+JSBhcy5kYXRhLmZyYW1lCmNvbG5hbWVzKHgpIDwtIGxhcHBseShjb2xuYW1lcyh4KSwgZ3JlcCwgc2FtcGxlX2RhdGEocHNTdWJfcmEpJFBsb3RfbGFiZWwsIHZhbHVlID0gVFJVRSkgJT4lIHVubGlzdAoKIyBBZGQgdGF4b25vbXkKeCA8LSBjYmluZCh4LCB0YXhfdGFibGUocHNTdWJfcmEpKQoKIyBSZW9yZGVyIHJvd3MgYW5kIGNvbHVtbnMgdG8gbWF0Y2ggb3JkaW5hdGlvbgp4IDwtIHhbbWF0Y2gocm93X29yZGVyLCByb3duYW1lcyh4KSksXQoKIyBTZXQgaG92ZXJ0ZXh0Cm5zYW1wIDwtIG5zYW1wbGVzKHBzU3ViX3JhKQpob3Zlcl9zdHJhaW4gPC0geFssIDE6bnNhbXBdCmhvdmVyX3N0cmFpbltdIDwtIHBhc3RlMCgiPGI+TWljcm9iZTo8L2I+ICIsIHgkU3RyYWluLCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIjxiPlJlbGF0aXZlIGFidW5kYW5jZTo8L2I+ICIpCmhvdmVyX3N0cmFpbiA8LSBhcy5tYXRyaXgoaG92ZXJfc3RyYWluKQoKaG92ZXJfYWJ1bmQgPC0geFssIDE6bnNhbXBdICU+JSByb3VuZCguLCBkaWdpdHMgPSAyKSAlPiUgYXMuZGF0YS5mcmFtZQpob3Zlcl9hYnVuZCA8LSBhcHBseShob3Zlcl9hYnVuZCwgMiwgcGFzdGUwLCAiJSIpCmhvdmVyX2FidW5kIDwtIGFzLm1hdHJpeChob3Zlcl9hYnVuZCkKCmhvdmVyX3RheCA8LSB4WywgMTpuc2FtcF0KaG92ZXJfdGF4W10gPC0gcGFzdGUwKCJcbiBcbjxiPlBoeWx1bTo8L2I+ICIsIHgkUGh5bHVtLCAiXG4iLAogICAgICAgICAgICAgICAgICAgIjxiPkNsYXNzOjwvYj4gIiwgeCRDbGFzcywgIlxuIiwKICAgICAgICAgICAgICAgICAgICI8Yj5PcmRlcjo8L2I+ICIsIHgkT3JkZXIsICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+RmFtaWx5OjwvYj4gIiwgeCRGYW1pbHksICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+R2VudXM6PC9iPiAiLCB4JEdlbnVzLCAiXG4iKQpob3Zlcl90YXggPC0gYXMubWF0cml4KGhvdmVyX3RheCkKCmhvdmVydGV4dCA8LSBtYXRyaXgocGFzdGUwKGhvdmVyX3N0cmFpbiwgaG92ZXJfYWJ1bmQsIGhvdmVyX3RheCksCiAgICAgICAgICAgICAgICBucm93ID0gbnJvdyhob3Zlcl90YXgpLCBuY29sID0gbmNvbChob3Zlcl90YXgpKQoKIyBQZXJmb3JtIGxvZzEwIHRyYW5zZm9ybWF0aW9uIG9uIHJlbGF0aXZlIGFidW5kYW5jZXMKZGF0YSA8LSBsb2coeFssIDE6bnNhbXBdLCBiYXNlID0gMTApCmRhdGFbc2FwcGx5KGRhdGEsIGlzLmluZmluaXRlKV0gPC0gTkEKYGBgCjxicj48YnI+Cgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS4yIEhpZ2gtcmVzb2x1dGlvbiBzbmFwc2hvdCBvZiBjb21tdW5pdHkgY29tcG9zaXRpb24KPC9kaXY+CkZpZ3VyZSAyIGlzIGFuIGludGVyYWN0aXZlIGZpZ3VyZSBzaG93aW5nIHRoZSBtaWNyb2JpYWwgY29tbXVuaXR5IGNvbXBvc2l0aW9uIGF0IGhpZ2hlciB0YXhvbm9ub21pYyByZXNvbHV0aW9uLiBIZXJlLCBlYWNoIHJvdyBjb3JyZXNwb25kcyB0byBhIHVuaXF1ZSBtaWNyb2JlLgo8YnI+PGJyPgpZb3UgY2FuIGludGVyYWN0IHdpdGggdGhpcyBmaWd1cmUgYnk6CgoqIEhvdmVyaW5nIHRoZSBjdXJzb3Igb3ZlciBhIGNlbGwgdG8gc2VlIHRoYXQgbWljcm9iZSdzIGdlbnVzIGFuZCBzcGVjaWVzIChhbmQgc3RyYWluIHdoZW4gYXZhaWxhYmxlKSwgcmVsYXRpdmUgYWJ1bmRhbmNlLCBhbmQgZnVsbCB0YXhvbm9taWMgY2xhc3NpZmljYXRpb24KKiBDbGlja2luZyBhbmQgZHJhZ2dpbmcgdGhlIGN1cnNvciBvdmVyIGEgcG9ydGlvbiBvZiB0aGUgZmlndXJlIHRvIHpvb20KCjxicj48YnI+CmBgYHtyLCBvdXQuaGVpZ2h0ID0gIjc1MHB4IiwgZWNobyA9IEZBTFNFfQojIFNldCBzYW1wbGUgbmFtZXMKI2NvbG5hbWVzKGRhdGEpIDwtIGMoIkVCXzI2OSAoc2FsaXZhKSIsICJFQl8yNzAgKENhcFNjYW4pIiwgIkVCXzI3MSAoQ2FwU2NhbikiLAojICAgICAgICAgICAgICAgICAgICAiRUJfMjcyIChDYXBTY2FuKSIsICJFQl8yNzMgKENhcFNjYW4pIiwgIkVCXzI3NCAoc3Rvb2wpIikKCiMgUHJlcGFyZSB0YXhvbm9teSByb3cgc2lkZQpyb3dfc2lkZSA8LSB4ICU+JSBzZWxlY3QoUGh5bHVtKQpyb3dfc2lkZSRQaHlsdW1bcm93X3NpZGUkUGh5bHVtICUhaW4lIG1ham9yX3BoeV0gPC0gIk90aGVyIHBoeWxhIgpyb3dfc2lkZSRQaHlsdW0gPC0gZmFjdG9yKHJvd19zaWRlJFBoeWx1bSwgbGV2ZWxzID0gYygiT3RoZXIgcGh5bGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFjdGVyb2lkZXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpbm9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIikpCgojIFBsb3QKcEhlYXQgPC0gaGVhdG1hcGx5KGRhdGEsCiAgICAgICAgICAgICAgICAgICBSb3d2ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICBDb2x2ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSB2aXJpZGlzOjp2aXJpZGlzKDEwKSwKICAgICAgICAgICAgICAgICAgIHJvd19zaWRlX2NvbG9ycyA9IHJvd19zaWRlLAogICAgICAgICAgICAgICAgICAgcm93X3NpZGVfcGFsZXR0ZSA9IGMoIkFjdGlub2JhY3RlcmlhIiA9ICIjRkZCNzI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYWN0ZXJvaWRldGVzIiA9ICIjNjRDNjJBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIiA9ICIjMDcyQUM4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm90ZW9iYWN0ZXJpYSIgPSAiI0U5M0I0RiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3RoZXIgcGh5bGEiID0gIiM4MzJDRkYiKSwKICAgICAgICAgICAgICAgICAgIHN1YnBsb3RfbWFyZ2luID0gMC4wMSwKICAgICAgICAgICAgICAgICAgIHN1YnBsb3Rfd2lkdGhzID0gYygwLjksIDAuMDcpLAogICAgICAgICAgICAgICAgICAgc2lkZV9jb2xvcl9jb2xvcmJhcl9sZW4gPSAwLjMsCiAgICAgICAgICAgICAgICAgICBwbG90X21ldGhvZCA9ICJwbG90bHkiLAogICAgICAgICAgICAgICAgICAgY3VzdG9tX2hvdmVydGV4dCA9IGhvdmVydGV4dCwKICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiPGI+U2FtcGxlPC9iPiIsCiAgICAgICAgICAgICAgICAgICB5bGFiID0gIjxiPk1pY3JvYmU8L2I+IiwKICAgICAgICAgICAgICAgICAgIGNvbG9yYmFyX3hwb3MgPSAxLjAxOSwKICAgICAgICAgICAgICAgICAgIGNvbG9yYmFyX3lwb3MgPSAwLjUsCiAgICAgICAgICAgICAgICAgICBjb2xvcmJhcl9sZW4gPSAwLjMpICU+JQogIGxheW91dCh4YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSksCiAgICAgICAgIHlheGlzID0gbGlzdChzaG93Z3JpZCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSksCiAgICAgICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICJBcmlhbCIpKSAlPiUKICBjb2xvcmJhcih0aXRsZSA9ICJSZWxhdGl2ZSBhYnVuZGFuY2UiLAogICAgICAgICAgIHRpY2t2YWxzID0gYygtMSwgMCwgMSksCiAgICAgICAgICAgdGlja3RleHQgPSBjKCIwLjElIiwgIjElIiwgIjEwJSIpKQoKIyBGb3JtYXQgcm93IHNpZGUKcEhlYXQkeCRsYXlvdXQkeGF4aXMyJHRpY2t0ZXh0IDwtICJQaHlsdW0iCnBIZWF0JHgkbGF5b3V0JHhheGlzJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEhlYXQkeCRsYXlvdXQkeGF4aXMyJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEhlYXQkeCRsYXlvdXQkeWF4aXMkbGluZWNvbG9yIDwtICIjMDAwMDAwIgpwSGVhdCR4JGxheW91dCRsZWdlbmQkeWFuY2hvciA8LSAiYm90dG9tIgpwSGVhdApgYGAKKipGaWd1cmUgMjoqKiBIZWF0IG1hcCBzaG93aW5nIHJlbGF0aXZlIGFidW5kYW5jZSBvZiBtaWNyb2JlcyBpbiBlYWNoIHNhbXBsZSAoTiA9IDIzOCB0b3RhbCBpZGVudGlmaWVkKS4gRWFjaCByb3cgY29ycmVzcG9uZHMgdG8gYSB1bmlxdWUgbWljcm9iZSBhbmQgZWFjaCBjb2x1bW4gY29ycmVzcG9uZHMgdG8gYW4gaW5kaXZpZHVhbCBzYW1wbGUuIE5vdGUgdGhlIHJlbGF0aXZlIGFidW5kYW5jZSBjb2xvcnNjYWxlIGlzIGluIGxvZyB1bml0cy4KCjxicj48YnI+Cgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS4zIE5vdGFibGUgbWljcm9iZXMgZGV0ZWN0ZWQKPC9kaXY+CgoqICpTdHJlcHRvY29jY3VzIGFuZ2lub3N1cyo6CiAgKiBQcmV2aW91c2x5IHNob3duIHRvIHByb2R1Y2UgYW4gYW50aW1pY3JvYmlhbCBwcm90ZWluICgiYW5naWNpbiIpIHRoYXQgZGlzcnVwdHMgdGhlIGNlbGwgbWVtYnJhbmUgb2YgY2xvc2VseSByZWxhdGVkIG9yZ2FuaXNtcywgZ2l2aW5nICpTdHJlcHRvY29jY3VzIGFuZ2lub3N1cyogYSBjb21wZXRpdGl2ZSBhZHZhbnRhZ2UgKFZvZ2VsICpldCBhbCouLCAyMDIxKQogICogU2Vjb25kIG1vc3QgcmVsYXRpdmVseSBhYnVuZGFudCBtaWNyb2JlIGluIHByb3hpbWFsIENhcFNjYW4gc2FtcGxlICh+MTMlKQo8YnI+PGJyPgoqICpGYWVjYWxpYmFjdGVyaXVtIHByYXVzbml0emlpKjoKICAqIFByZXZpb3VzbHkgc2hvd24gdG8gcHJvZHVjZSBhIHNtYWxsIHByb3RlaW4gdGhhdCBhbGxldmlhdGVzIGd1dCBpbmZsYW1tYXRpb24gaW4gbW91c2UgbW9kZWxzIChRdcOpdnJhaW4gKmV0IGFsKi4sIDIwMTcpCiAgKiBGb3VuZCBhdCB+NCUgcmVsYXRpdmUgYWJ1bmRhbmNlIGluIGRpc3RhbCBDYXBTY2FuIHNhbXBsZXMKICAKPGJyPjxicj4KCjxkaXYgY2xhc3M9ImhpZ2hsaWdodCI+CiMjIyAxLjQgUmVmZXJlbmNlcwo8L2Rpdj4KClF1w6l2cmFpbiwgRS4sIE1hdWJlcnQsIE0uQS4sIE1pY2hvbiwgQy4sIENoYWluLCBGLiwgTWFycXVhbnQsIFIuLCBUYWlsaGFkZXMsIEouLCAqZXQgYWwqLiAoMjAxNykgSWRlbnRpZmljYXRpb24gb2YgYW4gYW50aS1pbmZsYW1tYXRvcnkgcHJvdGVpbiBmcm9tICpGYWVjYWxpYmFjdGVyaXVtIHByYXVzbml0emlpKiwgYSBjb21tZW5zYWwgYmFjdGVyaXVtIGRlZmljaWVudCBpbiBDcm9obuKAmXMgZGlzZWFzZS4gR3V0IDY1OiA0MTXigJM0MjUuCgpWb2dlbCwgVi4sIEJhdWVyLCBSLiwgTWF1ZXJlciwgUy4sIFNjaGlmZmVsaG9seiwgTi4sIEhhdXB0LCBDLiwgU2VpYm9sZCwgRy5NLiwgKmV0IGFsKi4gKDIwMjEpIEFuZ2ljaW4sIGEgbm92ZWwgYmFjdGVyaW9jaW4gb2YgKlN0cmVwdG9jb2NjdXMgYW5naW5vc3VzKi4gU2NpIFJlcCAxMTogMeKAkzE2Lg==